package com.zhang.learn.loglearn.log4j;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.helpers.LogLog;
import org.junit.Test;

/**
 * @author zhanghaolian
 *
 * log4j主要由Loggers(日志记录器)、Appenders(输出端)和Layout(日志格式化器)组成
 *  Loggers:控制日志的输出级别与是否输出
 *  Appenders：控制日志的输出方式，如文件和控制台等输出方式
 *  Layout：控制日志信息的输出格式
 *
 * @Description TODO
 * @ClassName LearnLog4j
 * @date 2021/2/28 10:26
 */
public class LearnLog4j {
    /**
     * 入门的测试
     */
    @Test
    public void testSimpleUse() {
        // 初始化配置信息，推荐用配置文件配置，在入门的测试中，用代码方式配置
        BasicConfigurator.configure();

        // 获取日志记录器
        Logger logger = Logger.getLogger(LearnLog4j.class);

        // 日志输出
        logger.info("hello log4j");

        // 日志级别，log4j提了6中日志级别，但是在实际开发中一般只会用，中间4种，log4j默使用的日志级别是debug
        logger.fatal("fatal 非常严重：一般会造成系统的崩溃并终止运行");

        logger.error("error 错误信息：不会影响系统运行");
        logger.warn("warn 警告信息：可能会发生问题");
        logger.info("info 运行信息：记录程序运行中的相关信息，如网络连接和IO操作等");
        logger.debug("debug 运行信息：调试信息，一般在开发中使用，如记录程序变量等");

        logger.trace("trace 追踪信息：记录程序所有的流程信息");
    }

    /**
     * log4j自配置文件
     */
    @Test
    public void getCustomizeConfig() {
        // 开启log4j内置日志
        LogLog.setInternalDebugging(true);

        Logger logger = Logger.getLogger(LearnLog4j.class);

        System.out.println();

        // 日志输出
        logger.info("log4j自配置文件");

        // 日志级别，log4j提了6中日志级别，但是在实际开发中一般只会用，中间4种，log4j默使用的日志级别是debug
        logger.fatal("fatal 非常严重：一般会造成系统的崩溃并终止运行");

        logger.error("error 错误信息：不会影响系统运行");
        logger.warn("warn 警告信息：可能会发生问题");
        logger.info("info 运行信息：记录程序运行中的相关信息，如网络连接和IO操作等");
        logger.debug("debug 运行信息：调试信息，一般在开发中使用，如记录程序变量等");

        logger.trace("trace 追踪信息：记录程序所有的流程信息");
    }



}
